define(['jquery','common','config','arttemplateUtil'], function($,common,config,arttemplate) {
	var App = {};
	
	// 菜单图标
	App.menuicon = {
			"#home":"&#xe604;",
			"#back":"&#xe605;",
			/*"#goods":"&#xe606;",
			"#order":"&#xe607;",
			"#logistics":"&#xe602;",
			"#storeset":"&#xe603;",
			"#sidedishes":"&#xe610;",
			"#message":"&#xe612;",
			"#market":"&#xe72f;",
			"#authority":"&#xe614;",
			"#orderdelivery":"&#xe614;"*/
	};
	//渲染菜单
	App.rendermenu = function($menu_config){
		var obj={data:$menu_config};
		obj.menuicon=App.menuicon;
		obj.childsmap={};
		//设置子集
		$.each($menu_config,function(index,data){
			if(!(obj.childsmap[data.pid] instanceof Array)){
				obj.childsmap[data.pid]=[];
			}
			obj.childsmap[data.pid].push(data);
		});
		obj.roleparentid=0;
		// 初始化顶部菜单
		$('.navbar-nav-menu').html(arttemplate.template.compile($.loaddata('menu/navbar_nav_menu.html'))(obj));
		// 初始化左边菜单
		$('#navbar_left_side').after(arttemplate.template.compile($.loaddata('menu/navbar_left_side.html'))(obj));
		
	};

	//设置滚动交互
	App.navScroll = {
        $navWrap: $("#navmenubar"),

        maxScrollLeft: 0, // 导航条左移极限值

        wrapWidth: 0, // 容器宽度

        // 计算内部子节点总宽度
        _getTotalWidth: function() {
            var totalWidth = 0;

            this.$navWrap.find("li").each(function() {
                totalWidth += $(this).outerWidth();
            });

            return totalWidth;

        },

        init: function() {
            var _this = this,
                cooldown = false; // 减少 mousemove 执行次数

            var wrapOffsetLeft, // 容器左侧页面距离
                totalWidth; // 导航项总宽度和，实际导航宽度

            if (!this.$navWrap.length) {
                return false;
            }

            var bodyWidth = $(document.body).width();
            var logoWidth = $('.navbar-brand').outerWidth();
            var rightWidth = $('.navbar-right').outerWidth();
            var menuWidth = bodyWidth - logoWidth - rightWidth-20;
            if(menuWidth<800){
            	menuWidth=800;
            }
            $('#navmenubar').width(menuWidth);

            this.wrapWidth = this.$navWrap.outerWidth();
            totalWidth = this._getTotalWidth();

            this.maxScrollLeft = totalWidth - this.wrapWidth;

            // 如果左移极限值小于值，即子节点的宽度小于容器宽度，则没必要出现滑动导航
            if (this.maxScrollLeft <= 0) {
                return false;
            }

            wrapOffsetLeft = this.$navWrap.offset().left;

            this.$navWrap.on({
                "mousemove": function(e) {
                    // 如果在 mousemove 事件冷却时间内，则直接返回 false
                    if (cooldown) {
                        return false;
                    }

                    var 
                        x = e.clientX - wrapOffsetLeft, // x 为鼠标实际在容器内的 x 坐标位置
                        scrollLeft = 0;

                    // 前后各有一段拉伸区间，默认 80px
                    // 即前后 80px 导航条始终保持在头尾位置
                    if (x > _this.wrapWidth - 80) {
                        scrollLeft = totalWidth - _this.wrapWidth;
                    } else if (x > 80) {
                        scrollLeft = (totalWidth - _this.wrapWidth) * (x - 80) / (_this.wrapWidth - 80 * 2);
                    }

                    // 如果 scrollLeft 值没有变化，则不继续执行
                    if (_this.$navWrap.scrollLeft() == scrollLeft) {
                        return false;
                    }

                    // 使用动画缓冲
                    _this.$navWrap.stop().animate({ "scrollLeft": scrollLeft }, 100);


                    cooldown = true;

                    setTimeout(function() {
                        cooldown = false;
                    }, 50);
                }
            });
        }
    };

	//初始化菜单
	App.init = function(){
		// 需要初始化菜单
		common.ajax_request2('post','/topic/ajax/getMenu',{},function($data,$code,$business){
			if($code==200 && typeof $data =='object' && $data instanceof Array && $data.length>0){
				App.rendermenu($data);
			}else{
				window.layer.msg($business.businessNote);
			}
		},false);
		
		App.navScroll.init();
		$(window).resize(function() {
			App.navScroll.init();
	    });
	};
	
	App.init();
	
});